/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

/**
 *
 * @author wbeimar
 */



import Conexion.Conexion;
import VO.asignatura;
import VO.estudiante;
import java.lang.reflect.Field;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.ParseException;
import javax.swing.table.DefaultTableModel;

public class Consulta {
Conexion con;
DefaultTableModel dtm;
    public void guardar(String tabla, String datos){
    }
    public Consulta() throws Exception{
        con = new Conexion();
        con.ConexionPostgres();
    }
    public  void generarGrupos(){}
    public  String generarSql(String base, Object objeto){

      // Field[] userfield =Persona.class.getFields();
      
        Class clase = objeto.getClass();
        Field[] userfield = clase.getDeclaredFields();
     
        String nombres="";
        String campos="";
    //    Persona i=new Persona();
        
        System.out.println("numero campos=" + String.valueOf(userfield.length));
        
         for(int x=0;x<userfield.length;x++){
             userfield[x].setAccessible(true);
         }
        
        
        for(int x=0;x<userfield.length-1;x++){
            if(!userfield[x].getName().equals("id_"+base)){
                nombres+=userfield[x].getName()+",";
            }
        }
        
      // System.out.println(nombres);
        
        nombres+=userfield[userfield.length-1].getName();
        
        for(int x=0;x<=userfield.length-1;x++){
            try {
             if(!userfield[x].getName().equals("id_"+base)){   
                campos += "'" + userfield[x].get(objeto)+"',";
            }
            } catch (IllegalArgumentException ex) {
                Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
       
        campos=campos.substring(0, campos.length()-1);
       
        
        //campos+="'"+userfield[userfield.length-1].get(objeto)+"'";
        String sql="insert into"+" "+base+" "+" "+"("+nombres+") VALUES ("+campos.trim()+")";

    return sql;
    }
    public void horarios(String docente) throws SQLException{
       String query="select  gda.id_grupo_asignatura_docente,gda.id_grupo, gda.codigo_asignatura,gda.documento_docente,"
               + " a.horas_asignatura, sgda.hora_inicio, sgda.hora_fin,sgda.dia_semana FROM docente as d"
               + " inner join grupo_docente_asignatura as gda on(d.documento_docente = gda.documento_docente)"
               + "inner join asignatura as a on(gda.codigo_asignatura = a.codigo_asignatura)"
               + "inner join salon_grupo_docente_asignatura as sgda on"
               + " (sgda.id_grupo = gda.id_grupo)"
               + " where d.documento_docente='+333+'";
     ResultSet rsu = con.consultar(query);
     int i=1;
     int j=1;
       while(rsu.next()){        
  
            if((rsu.getInt("hora_inicio")==0)&&(rsu.getInt("hora_fin")==0) &&(rsu.getInt("horas_asignatura")==4)){
              int s=i+1;
             int y=j+1;
               String sql="UPDATE salon_grupo_docente_asignatura" +
                          "   SET dia_semana='"+j+"', hora_inicio='"+i+"',hora_fin='"+s+"'"+
                          " WHERE id_grupo_asignatura_docente='"+rsu.getInt("id_grupo_asignatura_docente")+"'"; 
               System.out.print(sql);
               con.actualizar(sql);
                String sql2="UPDATE salon_grupo_docente_asignatura" +
                          "   SET dia_semana='"+y+"', hora_inicio='"+i+"',hora_fin='"+s+"'"+
                          " WHERE id_grupo_asignatura_docente='"+rsu.getInt("id_grupo_asignatura_docente")+"'"; 
               con.actualizar(sql2);
                i=i+2;
               
           }else 
            if((rsu.getInt("hora_inicio")==0)&&(rsu.getInt("hora_fin")==0) &&(rsu.getInt("horas_asignatura")==2)){
               int s=i+1;
           String sql="UPDATE salon_grupo_docente_asignatura" +
                          "   SET dia_semana='"+j+"', hora_inicio='"+i+"',hora_fin='"+s+"'"+
                          " WHERE id_grupo_asignatura_docente='"+rsu.getInt("id_grupo_asignatura_docente")+"'"; 
               con.actualizar(sql);
               i=i+2;
            }
      
        if (i==7){
        j=j+1;
        i=1;
        }
    }
       }
    
    public void registrar(String tabla, Object objeto) throws Exception
    {
        
        Conexion con=new Conexion();
        con.ConexionPostgres();
                
        String sql=this.generarSql(tabla, objeto);
        System.out.println(sql);
        try{
           con.actualizar(sql);
          }
        catch(Exception e){
          }
     
    }
        public String Listar_Asignatura(String documento_estudiante) throws SQLException, ParseException
    {
    
        String datos="";
        
        String query = "SELECT  a.codigo_asignatura as CODIGO,a.nombre_asignatura as ASIGNATURA  from  estudiante as e inner join nota as n on ('"+documento_estudiante+"'=n.documento_estudiante) "
      + " inner join asignatura as a on (n.codigo_asignatura=a.codigo_asignatura) group by a.codigo_asignatura, a.nombre_asignatura";
   
        ResultSet rsu = con.consultar(query);
        ResultSetMetaData rsm = rsu.getMetaData();
        
        
       datos+="<table class=\"table-bordered table-condensed span12\">";
        
        datos+="<tr>";
        for(int i=1;i<=rsm.getColumnCount();i++){
            datos+="<th>"+rsm.getColumnName(i)+"</th>";
            
        }
        datos+="</tr>";

        while(rsu.next()){

            datos+="<tr>";
            for(int i=1;i<=rsm.getColumnCount();i++){          
                  datos+="<td>"+rsu.getString(i)+"</td>";
                  
                  
            }
             datos+="<td><a href='ver_notas.jsp?id="+rsu.getString(1)+"' class='btn btn-info btn-small'>Ver</a></td>";
        
           datos+="</tr>";
        }

        datos+="</table>";
        
        return datos;

    }
        public String Listar_Fallas(String documento_estudiante, String id_asignatura)throws SQLException, ParseException
    {
    
        String datos="";
        
       // String query = "SELECT f.numero_falla as FALLAS from estudiante as e inner join falla as f on (e.documento_estudiante=f.documento_estudiante) "
         //       + " inner join asignatura as a on (f.id_asignatura=a.id_asignatura) where e.documento_estudiante='"+documento_estudiante+"'";
       String query = " select N.periodo as PERIODO,N.valor_nota as NOTA,F.numero_falla as FALLAS  from   estudiante E, "
               + "falla F, nota N, asignatura A where (((E.documento_estudiante=N.documento_estudiante and "
               + "F.documento_estudiante=N.documento_estudiante)  and "
               + "(F.documento_estudiante='"+documento_estudiante+"'))and"
               + "(A.codigo_asignatura=N.codigo_asignatura and A.codigo_asignatura=F.codigo_asignatura )"
               + "and A.codigo_asignatura='"+id_asignatura+"')";
     
   
        ResultSet rsu = con.consultar(query);
        ResultSetMetaData rsm = rsu.getMetaData();
        
        
       datos+="<table class=\"table-bordered table-condensed span12\">";
        
        datos+="<tr>";
        for(int i=1;i<=rsm.getColumnCount();i++){
            datos+="<th>"+rsm.getColumnName(i)+"</th>";
        }
        datos+="</tr>";

        while(rsu.next()){

            datos+="<tr>";
            for(int i=1;i<=rsm.getColumnCount();i++){
               
                  datos+="<td>"+rsu.getString(i)+"</td>";
            }
             //datos+="<td><a href='#' class='btn btn-info btn-small'>Ver</a></td>";
            datos+="</tr>";
           
        }
        
        

    
        
        return datos;

    } 
    public ResultSet consultarPersona(String palabra) throws Exception
    {
       
        ResultSet consulta= null;
        Conexion con=new Conexion();
        con.ConexionPostgres();
        
        String sql="";
        
        if(palabra!=null){
           sql = "select * FROM persona where xxxxxx like'"+ palabra +"'";
         }
        else{
        	sql = "select * FROM persona";
        	
          
        	}
         try{
           consulta = con.consultar(sql);
            }
         catch(Exception e){
            }
        return consulta;
       
    } 
    public String Listar_Estudiantes(String id_grupo,String id_asi) throws SQLException, ParseException
    {
        String datos="";
        String where="id_grupo="+id_grupo;
        if(id_grupo.equals("0") || id_grupo.equals(null)){  where="id_grupo<0";   }
        
        String query = "select e.id_estudiante,e.primer_nombre_estudiante,e.segundo_nombre_estudiante,documento_estudiante,(select valor_nota FROM nota WHERE id_estudiante=e.id_estudiante AND id_asignatura="+id_asi+") AS Nota, (select numero_falla FROM falla WHERE id_estudiante=e.id_estudiante AND id_asignatura="+id_asi+" LIMIT 1) AS Fallas,(select falla_justificacion FROM falla WHERE id_estudiante=e.id_estudiante AND id_asignatura="+id_asi+" LIMIT 1) AS Justificacion,(select nombre_asignatura FROM asignatura where id_asignatura="+id_asi+") as Materia from estudiante e where e.id_grupo="+id_grupo+" ";

        ResultSet rsu = con.consultar(query);
        ResultSetMetaData rsm = rsu.getMetaData();
        
        
        datos+="<table class=\"table-bordered table-condensed span12\">";
        
        datos+="<tr>";
        for(int i=2;i<=rsm.getColumnCount();i++){
            datos+="<th>"+rsm.getColumnName(i)+"</th>";
        }
        datos+="</tr>";

        while(rsu.next()){

            datos+="<tr>";
            for(int i=2;i<=rsm.getColumnCount();i++){
               
                  datos+="<td>"+rsu.getString(i)+"</td>";
            }
             datos+="<td><a href='poner_falla.jsp?id_al="+rsu.getString(1)+"&id_asi="+id_asi+"&doc="+rsu.getString("documento_estudiante")+"&grupo="+id_grupo+"' class='btn btn-warning btn-small'>Agregar Falla</a></td>";
            datos+="</tr>";
           
        }

        datos+="</table>";
        datos=datos.replaceAll("null", "");
        return datos;

    }
    
    public String Listar_Docentes() throws SQLException, ParseException
    {
        String datos="";
        /*String where="id_grupo="+id_grupo;
        if(id_grupo.equals("0") || id_grupo.equals(null)){  where="id_grupo>0";   }*/
        
        String query = "SELECT (primer_nombre_docente || ' '|| segundo_nombre_docente) as Nombres,(primer_apellido_docente ||  ' ' ||segundo_apellido_docente )   as Apellidos,sexo_docente as sexo,documento_docente as Documento, telefono_docente as Telefono ,fecha_nacimiento_docente as Fecha_Nacimiento  FROM docente order by id_docente ASC";

        ResultSet rsu = con.consultar(query);
        ResultSetMetaData rsm = rsu.getMetaData();
        
        
        datos+="<table class=\"table-bordered table-condensed span12\">";
        
        datos+="<tr>";
        for(int i=1;i<=rsm.getColumnCount();i++){
            datos+="<th>"+rsm.getColumnName(i)+"</th>";
        }
        datos+="</tr>";

        while(rsu.next()){

            datos+="<tr>";
            for(int i=1;i<=rsm.getColumnCount();i++){
               
                  datos+="<td>"+rsu.getString(i)+"</td>";
            }
             datos+="<td><a href='#' class='btn btn-info btn-small'>Ver</a></td>";
            datos+="</tr>";
           
        }

        datos+="</table>";
        
        return datos;

    }
    
    public String Listar_Admins() throws SQLException, ParseException
    {
        String datos="";
        /*String where="id_grupo="+id_grupo;
        if(id_grupo.equals("0") || id_grupo.equals(null)){  where="id_grupo>0";   }*/
        
        String query = "SELECT (primer_nombre_administrativo || ' ' || segundo_nombre_administrativo) as Nombres,(primer_apellido_administrativo ||  ' ' ||segundo_apellido_administrativo )   as Apellidos,sexo_administrativo as sexo,documento_administrativo as Documento, telefono_administrativo as Telefono ,fecha_nacimiento_administrativo as Fecha_Nacimiento  FROM administrativo order by id_administrativo ASC";

        ResultSet rsu = con.consultar(query);
        ResultSetMetaData rsm = rsu.getMetaData();
        
        
        datos+="<table class=\"table-bordered table-condensed span12\">";
        
        datos+="<tr>";
        for(int i=1;i<=rsm.getColumnCount();i++){
            datos+="<th>"+rsm.getColumnName(i)+"</th>";
        }
        datos+="</tr>";

        while(rsu.next()){

            datos+="<tr>";
            for(int i=1;i<=rsm.getColumnCount();i++){
               
                  datos+="<td>"+rsu.getString(i)+"</td>";
            }
             datos+="<td><a href='#' class='btn btn-info btn-small'>Ver</a></td>";
            datos+="</tr>";
           
        }

        datos+="</table>";
        
        return datos;

    }
    
    public String ListarGeneral(String tabla,String columnas,String where,String tipo) throws SQLException, ParseException
    {
        String datos="";
        
//        String where="id_grupo="+id_grupo;
        if(where.equals("0") || where.equals(null)){  where="'1'";   }
        if(columnas.equals("0") || columnas.equals(null)){  columnas="*";   }
        
        String query = "SELECT "+columnas+"  FROM "+tabla+" WHERE "+where+"";

        ResultSet rsu = con.consultar(query);
        ResultSetMetaData rsm = rsu.getMetaData();
        
        
       datos+="<table class=\"table-bordered table-condensed span12\">";
        
        if(tipo.equals("tabla")){
        
        datos+="<tr>";
        for(int i=1;i<=rsm.getColumnCount();i++){
            if(!rsm.getColumnName(i).equals("documento_"+tabla)){
            datos+="<th>"+rsm.getColumnName(i)+"</th>";
            }
        }
        datos+="<th>Accion</th>";
        datos+="</tr>";
        

        while(rsu.next()){
            datos+="<tr>";
            for(int i=1;i<=rsm.getColumnCount();i++){  
                if(!rsm.getColumnName(i).equals("documento_"+tabla)){
                  datos+="<td>"+(rsu.getString(i))+"</td>";
                }
            }
            if(tabla.equals("docente")){
           datos+="<td><a href='generarhorario.jsp?id="+rsu.getString(1)+"'class='btn btn-info btn-small'>Horario </a></td>";
            }
            else {
            datos+="<td><a href='ver_info_"+tabla+".jsp?id="+rsu.getString(1)+"' class='btn btn-info btn-small'>Ver </a></td>";
            }
            
                
            
        }        
        
        }
            if(tipo.equals("select")){
               while(rsu.next()){
                datos+="<option value='"+rsu.getString(1)+"'>";
                for(int i=2;i<=rsm.getColumnCount();i++){
                    
                      datos+=""+rsu.getString(i)+"";
                    
                }
                datos+="</option>";  
                
                }  
            }
        
        //datos=datos.replaceAll("null", "-");
        
        
        
        return datos;

    } 
    public String Ver_infos(String tabla,String columnas,String where) throws SQLException, ParseException
    {
        String datos="";
        /*String where="id_grupo="+id_grupo;
        if(id_grupo.equals("0") || id_grupo.equals(null)){  where="id_grupo>0";   }*/
        
        String query = "SELECT "+columnas+"  FROM "+tabla+" WHERE "+where+" LIMIT 1";

        ResultSet rsu = con.consultar(query);
        ResultSetMetaData rsm = rsu.getMetaData();
        
        
        datos+="<table class=\"table-bordered table-condensed span12\">";
        
//        datos+="<tr>";
//        for(int i=1;i<=rsm.getColumnCount();i++){
//            datos+="<th>"+rsm.getColumnName(i)+"</th>";
//        }
//        datos+="</tr>";

        if(rsu.next()){

            
            for(int i=1;i<=rsm.getColumnCount();i++){
                datos+="<tr>";
                  datos+="<th class='span4'>"+rsm.getColumnName(i)+"</td>";
                  datos+="<td>"+rsu.getString(i)+"</td>";
                datos+="</tr>";
            }
             while(rsu.next()){
                datos+="<option value='"+rsu.getString(1)+"'>";
                for(int i=2;i<=rsm.getColumnCount();i++){
                    
                      datos+=""+rsu.getString(i)+"";
                    
                }
                datos+="</option>";  
                
                } 
             //datos+="<td><a href='#' class='btn btn-info btn-small'>Ver</a></td>";
            
           
        }

        datos+="</table>";
        datos=datos.replaceAll("null", "");
        return datos;

    }
   
    public String Ver_info(String columnas,String tabla,String where) throws SQLException, ParseException
    {
        String datos="";
        /*String where="id_grupo="+id_grupo;
        if(id_grupo.equals("0") || id_grupo.equals(null)){  where="id_grupo>0";   }*/
        
        String query = "select e.id_estudiante,e.primer_nombre_estudiante,e.primer_apellido_estudiante,e.documento_estudiante,a.nombre_asignatura from estudiante e,asignatura a WHERE e.id_estudiante=6  AND a.id_asignatura=4 LIMIT 1";

        ResultSet rsu = con.consultar(query);
        ResultSetMetaData rsm = rsu.getMetaData();
        
        
        datos+="<table class=\"table-bordered table-condensed span12\">";
        
//        datos+="<tr>";
//        for(int i=1;i<=rsm.getColumnCount();i++){
//            datos+="<th>"+rsm.getColumnName(i)+"</th>";
//        }
//        datos+="</tr>";

        if(rsu.next()){

            
            for(int i=1;i<=rsm.getColumnCount();i++){
                datos+="<tr>";
                  datos+="<th class='span4'>"+rsm.getColumnName(i)+"</td>";
                  datos+="<td>"+rsu.getString(i)+"</td>";
                datos+="</tr>";
            }
             //datos+="<td><a href='#' class='btn btn-info btn-small'>Ver</a></td>";
            
           
        }

        datos+="</table>";
        datos=datos.replaceAll("null", "");
        return datos;

    }
    
    public boolean validar(String tabla,String where) throws SQLException, ParseException
    {
        boolean valida=true;
        
        if(tabla==null && where==null){  valida=false;  }
        
        String query = "SELECT *  FROM "+tabla+" WHERE "+where+"";
        ResultSet rsu = con.consultar(query);
        
        while(rsu.next()){
           valida=false;   // si encuentra registro 
        }

        return valida;

    }    
    public String grupodocenteasignaturas(String id_doc) throws SQLException, ParseException
    {
        String datos="";
        
        String query = "SELECT  a.nombre_asignatura, gp.nombre_grupo, gr.nombre_grado "
                + "FROM docente as d inner join grupo_docente_asignatura as gda on "
                + "(d.documento_docente=gda.documento_docente)inner join asignatura as a on "
                + "(gda.id_asignatura = a.id_Asignatura) inner join grupo as gp on "
                + "(gda.id_grupo = gp.id_grupo) inner join grado as gr on (gp.id_grado = gr.id_grado) "
                + "where d.documento_docente= '"+id_doc+"'";
        
        ResultSet rsu = con.consultar(query);
        ResultSetMetaData rsm = rsu.getMetaData();
        
        
      /*  datos+="<table class=\"table-bordered table-condensed span12\">";
        
        datos+="<tr>";
        for(int i=1;i<=rsm.getColumnCount();i++){
            datos+="<th>"+rsm.getColumnName(i)+"</th>";
        }
        datos+="</tr>";
*/
        while(rsu.next())
        {
            datos+="<div class='span3'>";
            for(int i=1;i<=rsm.getColumnCount();i++)
            {
                
                datos+="<a href='listado_estudiantes_asignatura.jsp' class='btn btn-info btn-small span10'>";
                datos+="<h5>"+rsu.getString(i)+"</h5>";
            }
            datos+="</a></div>";
        }
        
             
        /*
        while(rsu.next()){

            datos+="<tr>";
            for(int i=1;i<=rsm.getColumnCount();i++){
               
                  datos+="<td>"+rsu.getString(i)+"</td>";
            }
             datos+="<td><a href='#' class='btn btn-info btn-small'>Ver</a></td>";
            datos+="</tr>";
           
        }
        
        datos+="</table>";*/

        
        
        return datos;

    }
    public  void guardarJornada( int id,String nombre) throws SQLException{
        
        String msj="";
    String sql="select * from jornada where nombre_jornada='"+nombre+"'";
   
        ResultSet rs = con.consultar(sql);
        
        if(!rs.next())
        {
          String consulta = "insert into jornada (id_jornada,nombre_jornada) values("+id+",'"+nombre+"')";
           
          con.actualizar(consulta);
          msj="JORNADA CREADO";
              
    }
     else
        {
            msj="YA EXISTE UNA JORNADA EN ESTE COLEGIO";
        }
        System.out.println(msj);}
    
    public String mostrar_horario(String docente) throws SQLException{
             String datos="";
        String query = "SELECT dia_semana,id_salon,hora_inicio,hora_fin,codigo_asignatura,id_grupo FROM salon_grupo_docente_asignatura where documento_docente='"+333+"' order by id_salon ASC;";

        ResultSet rsu = con.consultar(query);
        ResultSetMetaData rsm = rsu.getMetaData();
        
    
   
        
        datos+="<tr>";
        for(int i=1;i<=rsm.getColumnCount();i++){
            if(!rsm.getColumnName(i).equals("documento_docente")){
            datos+="<th>"+rsm.getColumnName(i)+"</th>";
            }
        }
        
        datos+="</tr>";
        

        while(rsu.next()){
            datos+="<tr>"; 
           datos+="<td>"+(rsu.getInt("dia_semana"))+"</td>"; 
                  datos+="<td>"+(rsu.getInt("id_salon"))+"</td>";
                  datos+="<td>"+(rsu.getInt("hora_inicio"))+"</td>";
                  datos+="<td>"+(rsu.getInt("hora_fin"))+"</td>";  
                  datos+="<td>"+(rsu.getInt("codigo_asignatura"))+"</td>";
                  datos+="<td>"+(rsu.getInt("id_grupo"))+"</td>";
                 
                  datos+="</tr>";
        }
         return datos; 
            }       
    public static void main(String[] args) throws Exception
    {
    	
        
//        asignatura a = new asignatura("Mate");
//        System.out.println(generarSql("asignatura", a));
//        
//        estudiante e = new estudiante();
//        System.out.println(generarSql("estudiante", e));
//        Consulta c=new Consulta();
//        
//<<<<<<< .mine
//        
//=======
//        String gda= c.grupodocenteasignaturas("12345");
//        
//        System.out.println(gda);
//        
//        
//            	
//>>>>>>> .r34
    }

    private void validacheck() {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
    
}